About JS模块

关于

  随着前端业务复杂度的增加,模块化开发成为共识。ES6语法importexport也逐渐被广泛应用,在此之前常用的模块化解决方案有commonjsAMDCMD

commonjs

  commonjs的目标是指定一个js模块化的标准,指定出可以同时在客户端和服务端运行的模块。这些模块有自己独立的作用域,可以向顶层曝露自己(module.exports),也可以引用其它模块(require)。nodejs和webpack都是采用了这样的规范。

AMD

  AMD,异步模块定义规范,弥补了commonjs规范模中块依赖只能同步加载的缺陷,对浏览器异步加载模块提供了解决方案。requirejs是典型的实践者。

1
define(String: name?, Array: dependencies?, factory);

CMD

  CMD,通用模块定义规范,偏向于commonjs规范,以一个文件为一个模块,支持同步加载和异步加载模块。

1
2
3
4
5
define(function(require, exports, module){
require();
require.async();
module.exports = {};
});

AMD和CMD区别

  • AMD异步加载模块,CMD同步、异步均可。
  • AMD推崇依赖前置,需要将依赖前置在依赖数组中;CMD推崇依赖就近,在使用模块前将模块require进来。